﻿//*** Guidance generated code ***//
using System;
using System.Collections.Generic;
using System.Diagnostics.Contracts;
using System.Linq;


namespace $safeprojectname$
{
    /// <summary>
    ///     The Filter constructor. This is the only way how Filters should be constructed in the application
    /// </summary>
    /// <typeparam name = "TFilter"></typeparam>
    /// <typeparam name="TID"></typeparam>
    public interface IFilterFactory<out TFilter, in TID> : IService
        where TFilter : class, IFilter<TID>
    {
        /// <summary>
        ///     Factory method to get new instance of TFilter (therefore working also for interface or abstract TFilter...)
        ///     This method is expected to return the Filter parameters
        ///     which are fully instantiated, but containing no restrictions
        ///     (other words: Find(CreateNewFilter()) would return the unfiltered (but paged) list)
        /// </summary>
        /// <returns></returns>
        TFilter CreateNewFilter();
    }
}